package com.shp.dao;

import com.shp.pojo.Good;
import com.shp.pojo.GoodsExtend;
import com.shp.pojo.Orders;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author ZWL
 * @Version: 1.0
 * @create: 2020/2/24 19:49
 */
public interface GoodsDao {

    /**
     * 根据商品的id，批量更新商品数量
     * @param ordersList List<Orders>，属性id和number必备
     * @return 影响行数
     */
    public int updateNumberByBatchGoodsId(@Param("list") List<Orders> ordersList);


    /**
     * 插入一条数据到goods表
     * @param goods 商品信息对象
     * @return 插入数据的id
     */
    public int insert(@Param("goods") Good goods);

    /**
     * 根据分类id，获取指定数量的商品
     * @param catelogId 分类id
     * @param size 数量
     * @return  List<Good>
     */
    public List<Good> getGoodsByCatelogAndDate(@Param("catelogId") int catelogId,@Param("size") int size);

    /**
     * 根据商品id获取Good
     * @param id 商品id
     * @return Good
     */
    public Good getGoodsById(@Param("id") int id);

    /**
     * 根据商品id，获取商品价格
     * @param goodsId 商品id
     * @return 商品价格
     */
    public float getPriceById(@Param("id") Integer goodsId);

    /**
     * 根据商品id，修改商品的状态
     * @param status 商品状态。1代表上架；0代表下架
     * @param goodsId 商品id
     * @return 影响行数
     */
    public int updateGoodsStatusById(@Param("status") int status,@Param("id")int goodsId);

    /**
     * 根据商品id，更改商品数量
     * @param id 商品id
     * @param i 修改后的数量
     * @return 影响行数
     */
    public int updateGoodsSizeById(@Param("id") Integer id, @Param("i") int i);

    /**
     * 根据商品的分类id，查询指定数量的商品
     * @param id 分类id
     * @param size 商品个数
     * @return List<GoodsExtend>
     */
    public List<GoodsExtend> getCategoryGoodsByIdAndDate(@Param("id") Integer id, @Param("size") Integer size);

    /**
     * 根据商品分类id，查询该分类的所有商品
     * 配合使用分页插件pageHelper，进行分页处理
     * @param categoryId 分类id
     * @return List<GoodsExtend>
     */
    public List<GoodsExtend> getCategoryGoods(@Param("id")Integer categoryId);

    /**
     * 查询所有的推荐的商品
     * 配合使用分页插件pageHelper，进行分页处理
     * @return List<GoodsExtend>
     */
    public List<GoodsExtend> getSelectedGoods();

    /**
     * 根据商品名称或描述，模糊查询商品
     * @param name 商品名称
     * @param describe 商品描述
     * @return List<GoodsExtend>
     */
    public List<GoodsExtend> searchGoodsList(@Param("name") String name,@Param("describe") String describe);

    /**
     * 获取用户发布的商品
     * @param userId 用户的id
     * @return List<GoodsExtend>
     */
    List<GoodsExtend> getGoodsByUserId(@Param("id") Integer userId);

    /**
     * 根据商品的id和用户的id，查询商品
     *
     * @param goodsId 商品id
     * @param userId  用户id
     * @return GoodsExtend
     */
    public GoodsExtend getGoodsByGoodsIdAndUserId(@Param("goodsId") Integer goodsId, @Param("userId") Integer userId);

    /**
     * 根据商品id，修改商品信息
     * @param goods 商品
     * @return 影响行数
     */
    public int updateGoodsByGoodsId(@Param("goods") Good goods);

    /**
     * 根据商品id删除商品
     * @param goodsId 商品id
     * @return 影响行数
     */
    public int deleteGoodsByGoodsId(@Param("id") Integer goodsId);

    /**
     * 获取所有商品
     *
     * @return List<goods>集合
     */
    public List<Good> getAll();

    /**
     * 批量删除商品
     *
     * @param ids 商品id数组
     * @return true删除成功；false删除失败
     */
    public int deleteGoodsBatch(@Param("ids") Integer[] ids);

    /**
     * 获取商品的图片
     * @param ids Integer[] ids
     * @return List<String>
     */
    public List<String> getGoodsImages(@Param("ids") Integer[] ids);

    /**
     * 查询所有符合条件（goods）的商品
     * @param goods 条件
     * @return List<Good>
     */
    public List<Good> getGoodsBySelect(@Param("goods") Good goods);
}
